package org.typowriter.intellij.plugins.backgroundchibichara; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class BackgroundChibiCharaSettingsForm { private JList jList; private JRadioButton alignLeft; private JRadioButton alignCenter; private JRadioButton alignRight; private JTextField fieldSpacing; private JTextField fieldMargin; private JButton addButton; private JPanel mainPanel; private JTextField fieldAlpha; private JButton removeButton; private ButtonGroup alignGroup; public BackgroundChibiCharaSettingsForm() { fieldSpacing.setInputVerifier(new IntegerInputVerifier()); fieldMargin.setInputVerifier(new IntegerInputVerifier()); fieldAlpha.setInputVerifier(new DoubleInputVerifier()); initAlignRadioButtons(); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { JFileChooser fileChooser = intiFileChooser(); int returnVal = fileChooser.showDialog(getComponent(), null); if (returnVal == JFileChooser.APPROVE_OPTION) { File[] files = fileChooser.getSelectedFiles(); List<String> filepathList = new ArrayList<String>(); for (File file : files) { filepathList.add(file.getAbsolutePath()); Notifications.Bus.notify(new Notification("", "", file.getAbsolutePath(), NotificationType.ERROR)); } addFilepathList(filepathList); } } }); removeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { removeFilePathIndexes(jList.getSelectedIndices()); } }); addButton.setBorder(null); removeButton.setBorder(null); } private JFileChooser intiFileChooser() { JFileChooser fileChooser = new JFileChooser(); fileChooser.setMultiSelectionEnabled(true); FileFilter filter = new FileNameExtensionFilter("image files", ImageIO.getReaderFileSuffixes()); fileChooser.setFileFilter(filter); return fileChooser; } private void addFilepathList(List<String> filepathList) { for (String filepath : filepathList) { ((DefaultListModel) jList.getModel()).addElement(filepath); } } private void removeFilePathIndexes(int[] indexes) { Arrays.sort(indexes); for (int idx = indexes.length - 1; idx >= 0; idx--) { if (idx >= 0) { ((DefaultListModel) jList.getModel()).remove(indexes[idx]); } } } private void createUIComponents() { } private void initAlignRadioButtons() { } public JRadioButton getAlignButton(BackgroundImageBorder.Align align) { switch (align) { case LEFT: return alignLeft; case CENTER: return alignCenter; case RIGHT: return alignRight; default: return alignLeft; } } public BackgroundImageBorder.Align getAlign() { if (alignLeft.isSelected()) { return BackgroundImageBorder.Align.LEFT; } else if (alignCenter.isSelected()) { return BackgroundImageBorder.Align.CENTER; } else if (alignRight.isSelected()) { return BackgroundImageBorder.Align.RIGHT; } else { return BackgroundImageBorder.Align.LEFT; } } public BackgroundChibiCharaSettings getSettings() { List<String> filepathList = getFilepathList(); return new BackgroundChibiCharaSettings( filepathList, getAlign(), Integer.parseInt(fieldMargin.getText()), Integer.parseInt(fieldSpacing.getText()), Double.parseDouble(fieldAlpha.getText()) ); } public void setSettings(BackgroundChibiCharaSettings settings) { DefaultListModel listModel = new DefaultListModel(); for (String path : settings.filepathList) { listModel.addElement(path); } jList.setModel(listModel); getAlignButton(settings.align).setSelected(true); fieldMargin.setText(String.valueOf(settings.margin)); fieldSpacing.setText(String.valueOf(settings.spacing)); fieldAlpha.setText(String.valueOf(settings.alpha)); } private List<String> getFilepathList() { List<String> filepathList = new ArrayList<String>(); ListModel model = jList.getModel(); for (int i = 0; i < model.getSize(); i++) { filepathList.add((String) model.getElementAt(i)); } return filepathList; } public JComponent getComponent() { return mainPanel; } private class IntegerInputVerifier extends InputVerifier { @Override public boolean verify(JComponent jComponent) { JTextField field = (JTextField) jComponent; boolean verified = false; try { Integer.parseInt(field.getText()); verified = true; } catch (NumberFormatException e) { UIManager.getLookAndFeel().provideErrorFeedback(field); } return verified; } } private class DoubleInputVerifier extends InputVerifier { @Override public boolean verify(JComponent jComponent) { JTextField field = (JTextField) jComponent; boolean verified = false; try { Double.parseDouble(field.getText()); verified = true; } catch (NumberFormatException e) { UIManager.getLookAndFeel().provideErrorFeedback(field); } return verified; } } }